home *** CD-ROM | disk | FTP | other *** search
- package javax.swing.text;
-
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.PrintStream;
- import java.io.Serializable;
- import java.util.Dictionary;
- import java.util.Hashtable;
- import java.util.Vector;
- import javax.swing.event.DocumentEvent;
- import javax.swing.event.DocumentListener;
- import javax.swing.event.EventListenerList;
- import javax.swing.event.UndoableEditEvent;
- import javax.swing.event.UndoableEditListener;
- import javax.swing.event.DocumentEvent.EventType;
- import javax.swing.undo.CompoundEdit;
- import javax.swing.undo.UndoableEdit;
-
- public abstract class AbstractDocument implements Document, Serializable {
- private transient int numReaders;
- private transient Thread currWriter;
- private Dictionary documentProperties;
- protected EventListenerList listenerList;
- private Content data;
- private AttributeContext context;
- private transient BranchElement bidiRoot;
- private static final String BAD_LOCK_STATE = "document lock failure";
- protected static final String BAD_LOCATION = "document location failure";
- public static final String ParagraphElementName = "paragraph";
- public static final String ContentElementName = "content";
- public static final String SectionElementName = "section";
- public static final String BidiElementName = "bidi level";
- public static final String ElementNameAttribute = "$ename";
- static final String I18NProperty = "i18n";
- static final String AsyncLoadPriority = "load priority";
- // $FF: synthetic field
- static Class class$javax$swing$event$DocumentListener;
- // $FF: synthetic field
- static Class class$javax$swing$event$UndoableEditListener;
-
- protected AbstractDocument(Content var1) {
- this(var1, StyleContext.getDefaultStyleContext());
- }
-
- protected AbstractDocument(Content var1, AttributeContext var2) {
- this.documentProperties = null;
- this.listenerList = new EventListenerList();
- this.data = var1;
- this.context = var2;
- this.bidiRoot = new BidiRootElement(this);
- this.putProperty("i18n", Boolean.FALSE);
-
- try {
- this.writeLock();
- Element[] var5 = new Element[]{new BidiElement(this, this.bidiRoot, 0, 1, 0)};
- this.bidiRoot.replace(0, 0, var5);
- } finally {
- this.writeUnlock();
- }
-
- }
-
- // $FF: synthetic method
- static void access$0(AbstractDocument var0, DefaultDocumentEvent var1) {
- var0.updateBidi(var1);
- }
-
- public void addDocumentListener(DocumentListener var1) {
- this.listenerList.add(class$javax$swing$event$DocumentListener != null ? class$javax$swing$event$DocumentListener : (class$javax$swing$event$DocumentListener = class$("javax.swing.event.DocumentListener")), var1);
- }
-
- public void addUndoableEditListener(UndoableEditListener var1) {
- this.listenerList.add(class$javax$swing$event$UndoableEditListener != null ? class$javax$swing$event$UndoableEditListener : (class$javax$swing$event$UndoableEditListener = class$("javax.swing.event.UndoableEditListener")), var1);
- }
-
- private byte[] calculateBidiLevels(int var1, int var2) {
- byte[] var3 = new byte[var2 - var1];
- int var4 = 0;
-
- Element var6;
- for(int var5 = var1; var5 < var2; var5 = var6.getEndOffset()) {
- var6 = this.getParagraphElement(var5);
- int var7 = var6.getStartOffset();
- int var8 = var6.getEndOffset();
-
- String var9;
- try {
- var9 = this.getText(var7, var8 - var7);
- } catch (BadLocationException var12) {
- throw new Error("Internal error: " + ((Throwable)var12).toString());
- }
-
- Bidi var10 = new Bidi(var9.toCharArray());
- byte[] var11 = var10.getLevels();
- System.arraycopy(var11, 0, var3, var4, var11.length);
- var4 += var11.length;
- }
-
- if (var4 != var3.length) {
- throw new Error("levelsEnd assertion failed.");
- } else {
- return var3;
- }
- }
-
- // $FF: synthetic method
- static Class class$(String var0) {
- try {
- return Class.forName(var0);
- } catch (ClassNotFoundException var2) {
- throw new NoClassDefFoundError(((Throwable)var2).getMessage());
- }
- }
-
- protected Element createBranchElement(Element var1, AttributeSet var2) {
- return new BranchElement(this, var1, var2);
- }
-
- protected Element createLeafElement(Element var1, AttributeSet var2, int var3, int var4) {
- return new LeafElement(this, var1, var2, var3, var4);
- }
-
- public synchronized Position createPosition(int var1) throws BadLocationException {
- return this.data.createPosition(var1);
- }
-
- public void dump(PrintStream var1) {
- Element var2 = this.getDefaultRootElement();
- if (var2 instanceof AbstractElement) {
- ((AbstractElement)var2).dump(var1, 0);
- }
-
- this.bidiRoot.dump(var1, 0);
- }
-
- protected void fireChangedUpdate(DocumentEvent var1) {
- Object[] var2 = this.listenerList.getListenerList();
-
- for(int var3 = var2.length - 2; var3 >= 0; var3 -= 2) {
- if (var2[var3] == (class$javax$swing$event$DocumentListener != null ? class$javax$swing$event$DocumentListener : (class$javax$swing$event$DocumentListener = class$("javax.swing.event.DocumentListener")))) {
- ((DocumentListener)var2[var3 + 1]).changedUpdate(var1);
- }
- }
-
- }
-
- protected void fireInsertUpdate(DocumentEvent var1) {
- Object[] var2 = this.listenerList.getListenerList();
-
- for(int var3 = var2.length - 2; var3 >= 0; var3 -= 2) {
- if (var2[var3] == (class$javax$swing$event$DocumentListener != null ? class$javax$swing$event$DocumentListener : (class$javax$swing$event$DocumentListener = class$("javax.swing.event.DocumentListener")))) {
- ((DocumentListener)var2[var3 + 1]).insertUpdate(var1);
- }
- }
-
- }
-
- protected void fireRemoveUpdate(DocumentEvent var1) {
- Object[] var2 = this.listenerList.getListenerList();
-
- for(int var3 = var2.length - 2; var3 >= 0; var3 -= 2) {
- if (var2[var3] == (class$javax$swing$event$DocumentListener != null ? class$javax$swing$event$DocumentListener : (class$javax$swing$event$DocumentListener = class$("javax.swing.event.DocumentListener")))) {
- ((DocumentListener)var2[var3 + 1]).removeUpdate(var1);
- }
- }
-
- }
-
- protected void fireUndoableEditUpdate(UndoableEditEvent var1) {
- Object[] var2 = this.listenerList.getListenerList();
-
- for(int var3 = var2.length - 2; var3 >= 0; var3 -= 2) {
- if (var2[var3] == (class$javax$swing$event$UndoableEditListener != null ? class$javax$swing$event$UndoableEditListener : (class$javax$swing$event$UndoableEditListener = class$("javax.swing.event.UndoableEditListener")))) {
- ((UndoableEditListener)var2[var3 + 1]).undoableEditHappened(var1);
- }
- }
-
- }
-
- public int getAsynchronousLoadPriority() {
- Integer var1 = (Integer)this.getProperty("load priority");
- return var1 != null ? var1 : -1;
- }
-
- protected final AttributeContext getAttributeContext() {
- return this.context;
- }
-
- public Element getBidiRootElement() {
- return this.bidiRoot;
- }
-
- protected final Content getContent() {
- return this.data;
- }
-
- protected final synchronized Thread getCurrentWriter() {
- return this.currWriter;
- }
-
- public abstract Element getDefaultRootElement();
-
- public Dictionary getDocumentProperties() {
- if (this.documentProperties == null) {
- this.documentProperties = new Hashtable(2);
- }
-
- return this.documentProperties;
- }
-
- public final Position getEndPosition() {
- Position var1;
- try {
- var1 = this.createPosition(this.data.length());
- } catch (BadLocationException var2) {
- var1 = null;
- }
-
- return var1;
- }
-
- public int getLength() {
- return this.data.length() - 1;
- }
-
- public abstract Element getParagraphElement(int var1);
-
- public final Object getProperty(Object var1) {
- return this.getDocumentProperties().get(var1);
- }
-
- public Element[] getRootElements() {
- Element[] var1 = new Element[]{this.getDefaultRootElement(), this.getBidiRootElement()};
- return var1;
- }
-
- public final Position getStartPosition() {
- Position var1;
- try {
- var1 = this.createPosition(0);
- } catch (BadLocationException var2) {
- var1 = null;
- }
-
- return var1;
- }
-
- public String getText(int var1, int var2) throws BadLocationException {
- String var3 = this.data.getString(var1, var2);
- return var3;
- }
-
- public void getText(int var1, int var2, Segment var3) throws BadLocationException {
- this.data.getChars(var1, var2, var3);
- }
-
- public void insertString(int var1, String var2, AttributeSet var3) throws BadLocationException {
- if (var2 != null && var2.length() != 0) {
- try {
- this.writeLock();
- UndoableEdit var6 = this.data.insertString(var1, var2);
- DefaultDocumentEvent var7 = new DefaultDocumentEvent(this, var1, var2.length(), EventType.INSERT);
- if (var6 != null) {
- var7.addEdit(var6);
- }
-
- this.insertUpdate(var7, var3);
- ((CompoundEdit)var7).end();
- this.fireInsertUpdate(var7);
- if (var6 != null && (var3 == null || !var3.isDefined(StyleConstants.ComposedTextAttribute))) {
- this.fireUndoableEditUpdate(new UndoableEditEvent(this, var7));
- }
- } finally {
- this.writeUnlock();
- }
-
- }
- }
-
- protected void insertUpdate(DefaultDocumentEvent var1, AttributeSet var2) {
- if (this.getProperty("i18n").equals(Boolean.TRUE)) {
- this.updateBidi(var1);
- }
-
- }
-
- boolean isLeftToRight(int var1, int var2) {
- Element var3 = this.getBidiRootElement();
- int var4 = var3.getElementIndex(var1);
- Element var5 = var3.getElement(var4);
- if (var5.getEndOffset() >= var2) {
- AttributeSet var6 = var5.getAttributes();
- return StyleConstants.getBidiLevel(var6) % 2 == 0;
- } else {
- return true;
- }
- }
-
- protected void postRemoveUpdate(DefaultDocumentEvent var1) {
- if (this.getProperty("i18n").equals(Boolean.TRUE)) {
- this.updateBidi(var1);
- }
-
- }
-
- public final void putProperty(Object var1, Object var2) {
- if (var2 != null) {
- this.getDocumentProperties().put(var1, var2);
- } else {
- this.getDocumentProperties().remove(var1);
- }
-
- }
-
- public final synchronized void readLock() {
- try {
- while(true) {
- if (this.currWriter != null) {
- if (this.currWriter == Thread.currentThread()) {
- return;
- }
-
- this.wait();
- } else {
- ++this.numReaders;
- break;
- }
- }
- } catch (InterruptedException var1) {
- }
-
- }
-
- private void readObject(ObjectInputStream var1) throws ClassNotFoundException, IOException {
- var1.defaultReadObject();
- this.listenerList = new EventListenerList();
- this.bidiRoot = new BidiRootElement(this);
-
- try {
- this.writeLock();
- Element[] var4 = new Element[]{new BidiElement(this, this.bidiRoot, 0, 1, 0)};
- this.bidiRoot.replace(0, 0, var4);
- } finally {
- this.writeUnlock();
- }
-
- var1.registerValidation(new 1(this), 0);
- }
-
- public final synchronized void readUnlock() {
- if (this.currWriter != Thread.currentThread()) {
- if (this.numReaders <= 0) {
- throw new StateInvariantError("document lock failure");
- } else {
- --this.numReaders;
- this.notify();
- }
- }
- }
-
- public void remove(int var1, int var2) throws BadLocationException {
- if (var2 > 0) {
- try {
- this.writeLock();
- DefaultDocumentEvent var5 = new DefaultDocumentEvent(this, var1, var2, EventType.REMOVE);
- boolean var6 = false;
- if (Utilities.is1dot2) {
- Element var7;
- for(var7 = this.getDefaultRootElement(); !var7.isLeaf(); var7 = var7.getElement(var7.getElementIndex(var1))) {
- }
-
- var6 = Utilities.isComposedTextElement(var7);
- }
-
- this.removeUpdate(var5);
- UndoableEdit var10 = this.data.remove(var1, var2);
- if (var10 != null) {
- var5.addEdit(var10);
- }
-
- this.postRemoveUpdate(var5);
- ((CompoundEdit)var5).end();
- this.fireRemoveUpdate(var5);
- if (var10 != null && !var6) {
- this.fireUndoableEditUpdate(new UndoableEditEvent(this, var5));
- }
- } finally {
- this.writeUnlock();
- }
- }
-
- }
-
- public void removeDocumentListener(DocumentListener var1) {
- this.listenerList.remove(class$javax$swing$event$DocumentListener != null ? class$javax$swing$event$DocumentListener : (class$javax$swing$event$DocumentListener = class$("javax.swing.event.DocumentListener")), var1);
- }
-
- public void removeUndoableEditListener(UndoableEditListener var1) {
- this.listenerList.remove(class$javax$swing$event$UndoableEditListener != null ? class$javax$swing$event$UndoableEditListener : (class$javax$swing$event$UndoableEditListener = class$("javax.swing.event.UndoableEditListener")), var1);
- }
-
- protected void removeUpdate(DefaultDocumentEvent var1) {
- }
-
- public void render(Runnable var1) {
- try {
- this.readLock();
- var1.run();
- } finally {
- this.readUnlock();
- }
-
- }
-
- public void setAsynchronousLoadPriority(int var1) {
- Integer var2 = var1 >= 0 ? new Integer(var1) : null;
- this.putProperty("load priority", var2);
- }
-
- public void setDocumentProperties(Dictionary var1) {
- this.documentProperties = var1;
- }
-
- private void updateBidi(DefaultDocumentEvent var1) {
- int var2;
- int var3;
- if (javax.swing.text.AbstractDocument.DefaultDocumentEvent.access$0(var1) == EventType.INSERT) {
- int var4 = var1.getOffset();
- int var5 = var4 + var1.getLength();
- var2 = this.getParagraphElement(var4).getStartOffset();
- var3 = this.getParagraphElement(var5).getEndOffset();
- } else {
- if (javax.swing.text.AbstractDocument.DefaultDocumentEvent.access$0(var1) != EventType.REMOVE) {
- throw new Error("Internal error: unknown event type.");
- }
-
- Element var18 = this.getParagraphElement(var1.getOffset());
- var2 = var18.getStartOffset();
- var3 = var18.getEndOffset();
- }
-
- byte[] var19 = this.calculateBidiLevels(var2, var3);
- Vector var20 = new Vector();
- int var6 = var2;
- int var7 = 0;
- if (var2 > 0) {
- int var8 = this.bidiRoot.getElementIndex(var2 - 1);
- var7 = var8;
- Element var9 = this.bidiRoot.getElement(var8);
- int var10 = StyleConstants.getBidiLevel(var9.getAttributes());
- if (var10 == var19[0]) {
- var6 = var9.getStartOffset();
- } else if (var9.getEndOffset() > var2) {
- var20.addElement(new BidiElement(this, this.bidiRoot, var9.getStartOffset(), var2, var10));
- } else {
- var7 = var8 + 1;
- }
- }
-
- int var21;
- for(var21 = 0; var21 < var19.length && var19[var21] == var19[0]; ++var21) {
- }
-
- int var22 = var3;
- BidiElement var23 = null;
- int var11 = this.bidiRoot.getElementCount() - 1;
- if (var3 <= this.getLength()) {
- int var12 = this.bidiRoot.getElementIndex(var3);
- var11 = var12;
- Element var13 = this.bidiRoot.getElement(var12);
- int var14 = StyleConstants.getBidiLevel(var13.getAttributes());
- if (var14 == var19[var19.length - 1]) {
- var22 = var13.getEndOffset();
- } else if (var13.getStartOffset() < var3) {
- var23 = new BidiElement(this, this.bidiRoot, var3, var13.getEndOffset(), var14);
- } else {
- var11 = var12 - 1;
- }
- }
-
- int var24;
- for(var24 = var19.length; var24 > var21 && var19[var24 - 1] == var19[var19.length - 1]; --var24) {
- }
-
- if (var21 == var24 && var19[0] == var19[var19.length - 1]) {
- var20.addElement(new BidiElement(this, this.bidiRoot, var6, var22, var19[0]));
- } else {
- var20.addElement(new BidiElement(this, this.bidiRoot, var6, var21 + var2, var19[0]));
-
- int var27;
- for(int var25 = var21; var25 < var24; var25 = var27) {
- for(var27 = var25; var27 < var19.length && var19[var27] == var19[var25]; ++var27) {
- }
-
- var20.addElement(new BidiElement(this, this.bidiRoot, var2 + var25, var2 + var27, var19[var25]));
- }
-
- var20.addElement(new BidiElement(this, this.bidiRoot, var24 + var2, var22, var19[var19.length - 1]));
- }
-
- if (var23 != null) {
- var20.addElement(var23);
- }
-
- int var26 = 0;
- if (this.bidiRoot.getElementCount() > 0) {
- var26 = var11 - var7 + 1;
- }
-
- Element[] var28 = new Element[var26];
-
- for(int var15 = 0; var15 < var26; ++var15) {
- var28[var15] = this.bidiRoot.getElement(var7 + var15);
- }
-
- Element[] var16 = new Element[var20.size()];
- var20.copyInto(var16);
- ElementEdit var17 = new ElementEdit(this.bidiRoot, var7, var28, var16);
- var1.addEdit(var17);
- this.bidiRoot.replace(var7, var28.length, var16);
- }
-
- protected final synchronized void writeLock() {
- try {
- while(this.numReaders > 0 || this.currWriter != null) {
- if (Thread.currentThread() == this.currWriter) {
- throw new IllegalStateException("Attempt to mutate in notification");
- }
-
- this.wait();
- }
-
- this.currWriter = Thread.currentThread();
- } catch (InterruptedException var1) {
- }
-
- }
-
- protected final synchronized void writeUnlock() {
- this.currWriter = null;
- this.notify();
- }
- }
-